using System;
using System.Collections.Generic;
using System.Text;

using ImPM.Data.Base;

namespace ImPM.Data.ManagerObjects
{
    public interface IManagerFactory
    {
		// Get Methods
		ICalendarManager GetCalendarManager();
		ICalendarManager GetCalendarManager(INHibernateSession session);
		ICalendarExceptionManager GetCalendarExceptionManager();
		ICalendarExceptionManager GetCalendarExceptionManager(INHibernateSession session);
		IProjectManager GetProjectManager();
		IProjectManager GetProjectManager(INHibernateSession session);
		IProjectTaskManager GetProjectTaskManager();
		IProjectTaskManager GetProjectTaskManager(INHibernateSession session);
		IResourceManager GetResourceManager();
		IResourceManager GetResourceManager(INHibernateSession session);
		IResourceTaskManager GetResourceTaskManager();
		IResourceTaskManager GetResourceTaskManager(INHibernateSession session);
		IRoleManager GetRoleManager();
		IRoleManager GetRoleManager(INHibernateSession session);
		ITaskManager GetTaskManager();
		ITaskManager GetTaskManager(INHibernateSession session);
		IUserManager GetUserManager();
		IUserManager GetUserManager(INHibernateSession session);
    }

    public class ManagerFactory : IManagerFactory
    {
        #region Constructors

        public ManagerFactory()
        {
        }

        #endregion

        #region Get Methods

		public ICalendarManager GetCalendarManager()
        {
            return new CalendarManager();
        }
		public ICalendarManager GetCalendarManager(INHibernateSession session)
        {
            return new CalendarManager(session);
        }
		public ICalendarExceptionManager GetCalendarExceptionManager()
        {
            return new CalendarExceptionManager();
        }
		public ICalendarExceptionManager GetCalendarExceptionManager(INHibernateSession session)
        {
            return new CalendarExceptionManager(session);
        }
		public IProjectManager GetProjectManager()
        {
            return new ProjectManager();
        }
		public IProjectManager GetProjectManager(INHibernateSession session)
        {
            return new ProjectManager(session);
        }
		public IProjectTaskManager GetProjectTaskManager()
        {
            return new ProjectTaskManager();
        }
		public IProjectTaskManager GetProjectTaskManager(INHibernateSession session)
        {
            return new ProjectTaskManager(session);
        }
		public IResourceManager GetResourceManager()
        {
            return new ResourceManager();
        }
		public IResourceManager GetResourceManager(INHibernateSession session)
        {
            return new ResourceManager(session);
        }
		public IResourceTaskManager GetResourceTaskManager()
        {
            return new ResourceTaskManager();
        }
		public IResourceTaskManager GetResourceTaskManager(INHibernateSession session)
        {
            return new ResourceTaskManager(session);
        }
		public IRoleManager GetRoleManager()
        {
            return new RoleManager();
        }
		public IRoleManager GetRoleManager(INHibernateSession session)
        {
            return new RoleManager(session);
        }
		public ITaskManager GetTaskManager()
        {
            return new TaskManager();
        }
		public ITaskManager GetTaskManager(INHibernateSession session)
        {
            return new TaskManager(session);
        }
		public IUserManager GetUserManager()
        {
            return new UserManager();
        }
		public IUserManager GetUserManager(INHibernateSession session)
        {
            return new UserManager(session);
        }
        
        #endregion
    }
}
